# 动物举例

# 在类当中，所有的方法第一个形参都为self
# self 类似于Java的this，用来访问实例属性
class Pet:
    # 类属性的变量
    Pet_type = "cat"
    name = ""
    age = 0

    # 构造函数
    def __init__(self, name, age, Pet_type):
        self.name = name
        self.age = age
        self.Pet_type = Pet_type

    def showPet(self):
        print(f"我的宠物是{self.Pet_type},他/她的名字是：{self.name}，{self.age}岁了")

    # 重新设置age值
    def setAgeValue(self, age):
        self.age = age

    # 重新设置age的类属性
    def setAgeClass(self, age):
        self.__class__.age = age

    # 析构函数
    # Python可以实现显式删除对象：只是做个标记但是实际并没有执行
    # Java的垃圾回收机制很占用时间，只会在任务完成之后触发垃圾回收；
    # 如果遇到CPU在高负荷运转的情况，没空闲时间回收。所有任务都将被清退然后触发Java的垃圾回收机制。
    # Flink/Storm --> 非常讲究实时性的任务
    # 手动的创建析构函数来进行垃圾回收
    def __del__(self):
        # heat堆
        print(f"{self.name} and {self.age} is being deleted!")


def main():
    # 创建一个对象dahuang，且这个对象属于Pet类
    dahuang = Pet("dahuang", 4, "dog")

    print("***********************************************")
    # dahuang.showPet()
    print("大黄对象的Age的类属性是：", dahuang.__class__.age)
    print("大黄对象的Age的数值是：", dahuang.age)
    print("***********************************************")
    dahuang.setAgeValue(7)
    print("大黄对象的Age的类属性是：", dahuang.__class__.age)
    print("大黄对象的Age的数值是：", dahuang.age)
    print("***********************************************")
    dahuang.setAgeClass(10)
    print("大黄对象的Age的类属性是：", dahuang.__class__.age)
    print("大黄对象的Age的数值是：", dahuang.age)
    print("***********************************************")
    dahuang.__del__()


main()